﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TogheterWeBuyIt.Models;

namespace TogheterWeBuyIt.Controllers
{
    public class PassagemAviaoController : Controller
    {
        //
        // GET: /PassagemAviao/
		PassagemAviaoRepository repPassagem = new PassagemAviaoRepository();
		DesejaProdutoRepository repDesejo = new DesejaProdutoRepository();
		CidadeRepository repCidade = new CidadeRepository();
		ProdutosRepository repProd = new ProdutosRepository();

		public ActionResult Index(PassagemAviao passagemAviao)
        {
			IQueryable<PassagemAviao> passagens = repPassagem.GetPassagensAviao(passagemAviao.Origem, passagemAviao.Destino);

			if (passagens.Count() == 0)
			{
				passagemAviao.CidadeDestino = repCidade.GetCidade(passagemAviao.Destino);
				passagemAviao.CidadeOrigem = repCidade.GetCidade(passagemAviao.Origem);

				List<PassagemAviao> pasList = new List<PassagemAviao>() { passagemAviao };
				passagens = pasList.AsQueryable();
			}

            return View(passagens);
        }

		[HttpPost]
		public ActionResult Index(FormCollection collection)
		{
			if (Session["LoggedUserId"] != null)
			{
				cidade origem = repCidade.GetCidade(collection["TxbOrigem"]);
				cidade destino = repCidade.GetCidade(collection["TxbDestino"]);

				decimal preco = decimal.Parse(collection["TxbPreco"]);
				DateTime dataInicio = DateTime.Parse(collection["TxbDataInicio"]);
				DateTime dataFim = DateTime.Parse(collection["TxbDataFim"]);

				int idProd = _InserePassagemAviao(origem, destino);				

				DesejaProduto desejo = new DesejaProduto()
				{
					DataFim = dataFim,
					DataInicio = dataInicio,
					IdProduto = idProd,
					IdUsuario = (int)Session["LoggedUserId"],
					PrecoMax = preco,
					DataCriado = DateTime.Now
				};

				repDesejo.Add(desejo);

				return RedirectToAction("Details", "DesejaProduto", new { id = idProd });
			}

			return RedirectToAction("LogIn", "Usuario");
		}

		private int _InserePassagemAviao(cidade origem, cidade destino)
		{
			PassagemAviao pAviao;

			int idProd = repProd.Add(new Produto() { IdTipo = ETipoProduto.PassagemAviao });

			pAviao = new PassagemAviao()
			{
				IdProduto = idProd,
				Destino = destino.cod_cidade,
				Origem = origem.cod_cidade,
			};

			repPassagem.Add(pAviao);
			return idProd;
		}

		[HttpPost]
		public ActionResult Join(FormCollection collection)
		{
			int idProd = int.Parse(collection["IdProd"]);
			PassagemAviao pAviao = repPassagem.GetPassagenAviao(idProd);

			if (collection["IsToJoin"] == null)
				return View(pAviao);
			else if (bool.Parse(collection["IsToJoin"]))
			{
				if (Session["LoggedUserId"] != null)
				{
					decimal preco = decimal.Parse(collection["TxbPreco"]);
					DateTime dataInicio = DateTime.Parse(collection["TxbDataInicio"]);
					DateTime dataFim = DateTime.Parse(collection["TxbDataFim"]);

					DesejaProduto desejo = new DesejaProduto()
					{
						DataFim = dataFim,
						DataInicio = dataInicio,
						IdProduto = idProd,
						IdUsuario = (int)Session["LoggedUserId"],
						PrecoMax = preco,
						DataCriado = DateTime.Now
					};

					repDesejo.Add(desejo);

					return RedirectToAction("Details", "DesejaProduto", new { id = idProd });
				}
				else
					return RedirectToAction("LogIn", "Usuario");
			}
			else
				return View();
		}

        //
        // GET: /PassagemAviao/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /PassagemAviao/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /PassagemAviao/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /PassagemAviao/Edit/5
 
        public ActionResult Edit(int id)
        {
            return View();
        }

        //
        // POST: /PassagemAviao/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add update logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /PassagemAviao/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /PassagemAviao/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
